package cn.edu.hqu.cst.android.ex3demo;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;




public class progressDialogTest  extends Activity {
    // 该程序模拟填充长度为 100 的数组
    private  int[] data = new int[100];
    int hasData = 0;
    // 定义进度对话框的标识
    final int PROGRESS_DIALOG = 0x123;
    // 记录进度对话框的完成百分比
    int progressStatus = 0;
    ProgressDialog pd;
    Handler handler;


    @SuppressLint("HandlerLeak")
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button execute_task = findViewById(R.id.execute_task);
        execute_task.setOnClickListener(new OnClickListener() {
            public void onClick(View source) {
                showDialog(PROGRESS_DIALOG);
            }
        });

        handler = new Handler() {
            public void handleMessage(Message msg) {

                // 表明消息是由该程序发送的。
                if (msg.what == 0x123)
                    pd.setProgress(progressStatus);

            }
        };
    }

    @Override
    public Dialog onCreateDialog(int id, Bundle status) {
        System.out.println("------create------");
        if (id == PROGRESS_DIALOG) {// 创建进度对话框
            pd = new ProgressDialog(this);
            pd.setMax(100);
// 设置对话框的标题
            pd.setTitle("任务完成百分比");
// 设置对话框 显示的内容
            pd.setMessage("耗时任务的完成百分比");
// 设置对话框不能用“取消”按钮关闭
            pd.setCancelable(false);
// 设置对话框的进度条风格
            pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 设置对话框的进度条是否显示进度
            pd.setIndeterminate(false);
        }
        return pd;
    }

    // 该方法将在 onCreateDialog 方法调用之后被回调@Override
    public void onPrepareDialog(int id, Dialog dialog) {
        System.out.println("------prepare------");
        super.onPrepareDialog(id, dialog);
        if (id == PROGRESS_DIALOG) {// 对话框进度清零
            pd.incrementProgressBy(-pd.getProgress());
            new Thread() {
                public void run() {
                    while (progressStatus < 100) {
// 获取耗时操作的完成百分比
                        progressStatus = doWork();
// 发送消息到 Handler
                        Message msg = new Message();
                        msg.what = 0x123;
                        handler.sendMessage(msg);
                    }
// 如果任务已经完成
                    // 关闭对话框
                    pd.dismiss();
                }
            }.start();
        }
    }

    // 模拟一个耗时的操作。
    public int doWork() {
// 为数组元素赋值
        data[hasData++] = (int) (Math.random() * 100);
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return hasData;
    }
}